// system.h: interface for the system class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SYSTEM_H__C72A7B90_794F_49D6_9242_7B1D492C301D__INCLUDED_)
#define AFX_SYSTEM_H__C72A7B90_794F_49D6_9242_7B1D492C301D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "LSHCommon.h"

LSH_NAMESPACE_BEGIN

struct ProcessInfo;
class LogSystem; 
class ErrorSystem;
class TimeSytem;
class WindowSystem;
class InputSystem;
class AudioSystem;
class NetworkSystem;
class GraphSystem;

class FrameSystem;
class TaskSystem;
class ResourceSystem;
class FactorySystem;

class System{
public:
    System();
    virtual ~System();
public:
    virtual bool Init(ProcessInfo* pProcessInfo) = 0;
    virtual bool Shutdown() = 0;
public:
    virtual ProcessInfo*     GetProcessInfo() = 0;
    virtual LogSystem*       GetLogSystem() = 0;
    virtual ErrorSystem*     GetErrorSystem() = 0;
    virtual TimeSytem*       GetTimeSystem() = 0;
    virtual WindowSystem*    GetWindowSystem() = 0;
    virtual InputSystem*     GetInputSystem() = 0;
    virtual AudioSystem*     GetAudioSystem() = 0;
    virtual NetworkSystem*   GetNetworkSystem() = 0;
    virtual GraphSystem*     GetGraphSystem() = 0;
public:
    virtual FrameSystem*     GetFrameSystem() = 0;
    virtual TaskSystem*      GetTaskSystem() = 0;
    virtual ResourceSystem*  GetResourceSystem() = 0;
    virtual FactorySystem*   GetFactorySystem() = 0;
};

LSH_NAMESPACE_END

#endif // !defined(AFX_SYSTEM_H__C72A7B90_794F_49D6_9242_7B1D492C301D__INCLUDED_)
